Moxa DLM On‑Premises v1.2 — Installation & Upgrade Guide

Version 1.2 · 2026
© 2026 Moxa Inc. All rights reserved.

Moxa DLM On‑Premises has two software components, downloaded as two separate packages on the Moxa website:

This single guide covers both. It handles first‑time installation and upgrading from v1.1, and explains how to update the DLM Agent from the DLM Server using Run Custom Script. The parts below are self‑contained, so you can jump straight to the one you need.

Which part do I need?

You are… Go to
Standing up a new DLM Server (or upgrading one) Part 1 — DLM Server
Installing the Agent on UC devices for the first time Part 2 — DLM Agent
Updating the Agent already on devices Part 3 — Update the Agent
Checking status / troubleshooting a device Part 4 — Verify & Troubleshoot
✎ NOTE

The Agent depends on the Server: before enrolling devices you need the Server's FQDN, a Provisioner account, and (optionally) the server certificate. If you only received the Agent package, see Before you start at the top of Part 2.


Release contents & version matrix

DLM components are versioned independently — the Agent version does not match the Server version (this release: Server 1.2.0, Agent 1.1.0 / 2.1.4). Use the table below to pick the correct Agent build for each device.

Component Version (this release) File
DLM Server 1.2.0 (build 88) dlm-1.2.0-build.88.tar.gz
DLM Agent — UC‑8200, MIL 3 1.1.0‑1 DLM_Agent_MIL3_UC-8200
DLM Agent — UC‑1200A/2200A/3400A/4400A/8600A, MIL 3 1.1.0‑1 DLM_Agent_MIL3_UC-1200A-2200A-3400A-4400A-8600A
DLM Agent — UC‑1200A/2200A/3400A/4400A/8600A, MIL 4 2.1.4‑1 DLM_Agent_MIL4_UC-1200A-2200A-3400A-4400A-8600A
⚠ WARNING

Pick the Agent by the device's model and MIL major version — not by the Server version. MIL 3 devices use Agent 1.1.0; MIL 4 devices use Agent 2.1.4. See How to choose the right Agent build.


Part 1: Install the DLM Server

1.1 Prerequisites

✎ NOTE

Strongly recommended: use an FQDN (not a bare IP) for the server. The FQDN is asked for only at first install; you can later change the host's IP without re‑registering any device.

1.2 Verify the download

A checksum file (dlm-1.2.0-build.88.tar.gz.sha) ships alongside the installer. Verify before installing:

sha1sum -c dlm-1.2.0-build.88.tar.gz.sha
# Expected output:
#   dlm-1.2.0-build.88.tar.gz: OK

1.3 Install (first‑time)

# 1) Set the file name you received
DLM_FILENAME=dlm-1.2.0-build.88.tar.gz

# 2) Extract into /usr/local
sudo tar zxvf ${DLM_FILENAME} -C /usr/local

# 3) Register the local apt repo
echo "deb [trusted=yes] file:/usr/local/moxa-dlm-local-apt-repo jammy/" \
  | sudo tee /etc/apt/sources.list.d/moxa-dlm.list

# 4) Refresh apt and install
sudo apt-get update
sudo apt-get install dlm

The DLM Text User Interface (TUI) opens automatically and runs a system‑requirements check (CPU, memory, disk, OS, package dependencies, network):

Result Meaning
Info Meets all recommended requirements — installation continues automatically.
⚠️ Warning Meets only the minimal requirements — you may press Y to continue.
Alert Below minimum — installation will not proceed.

Then: 1. Enter the FQDN when prompted (first install only). 2. Create the default administrator account. Default password: admin@123. 3. When done, open the web console at https://YOUR_FQDN.

✎ NOTE

NOTE — offline installs: if the server previously ran apt-get update online, add --no-install-recommends: sudo apt-get install dlm --no-install-recommends WARNING — unsupported architectures: if apt-get update complains about armhf/i386, remove those foreign architectures first, then reinstall.

Reinstalling: uninstall the current version first, otherwise you may hit Errors were encountered while processing … needrestart is being skipped since dpkg has failed.

1B. Upgrade an existing v1.1 Server

Upgrading reuses your existing configuration and keeps all registered devices.

  1. Back up the DLM database. DLM has a built-in backup tool (User Manual §8 Backup and Recovery).

    dlm backup                                 # creates an encrypted backup file → dlm-backup-YYYYMMDDxxxx.tgz.enc
    dlm verify-backup dlm-backup-XXXX.tgz.enc  # confirm the backup is valid
    

    Store the encrypted file off the server. For cloud/VM hosts, also take a VM snapshot.

  2. Verify the new package (§1.2).
  3. Stop the DLM service (required before upgrade):

    sudo systemctl stop dlmg2
    
  4. Run the same install commands as §1.3 with the v1.2 file:

    DLM_FILENAME=dlm-1.2.0-build.88.tar.gz
    sudo tar zxvf ${DLM_FILENAME} -C /usr/local
    echo "deb [trusted=yes] file:/usr/local/moxa-dlm-local-apt-repo jammy/" \
      | sudo tee /etc/apt/sources.list.d/moxa-dlm.list
    sudo apt-get update
    sudo apt-get install dlm
    
  5. The TUI re‑runs the requirements check and upgrades in place.

1.4 Access the web console

  1. Browse to https://YOUR_FQDN.
  2. Log in with the administrator email set during install and password admin@123.
  3. Change the password immediately on first login.

1.5 Create a Provisioner role (for device enrollment)

DLM ships with no default enrollment account, so before enrolling any device you must create one. Create a low‑privilege Provisioner user for this. A Provisioner can register devices but cannot log in to the web console or API — so the enrollment credentials placed on devices can't be used to reach your data.

  1. Users and Roles → Create.
  2. Assign the Provisioner role.
  3. Create, then hand the email + password to whoever enrolls the Moxa computers.

Part 2: Install the DLM Agent on UC Computers

✎ NOTE

DLM Agent ships as a separate download (Software Package for DLM Agent). It is not pre‑installed on UC computers — you install it and point it at your DLM Server.

Before you start (what the Agent needs from the Server)

Whoever installs agents needs three things from the DLM Server side (Part 1):

Need Where it comes from
Server FQDN the address set at server install — goes into user.yaml (§2.3)
Provisioner account (email + password) create it on the server (§1.5) — goes into credentials.yaml (§2.4)
Server certificate (optional) only when validating the server identity (§2.5)

The device must also be able to reach the Server over the network (ping YOUR_FQDN).

2.1 Choose the right Agent build

Pick the package by your device model and its MIL version. The model is on the device label; to confirm the MIL version, run on the device:

mx-ver -M                 # MIL major version, e.g. 3.4.1  or  4.0.x
Device model Device MIL Use this Agent package Agent version
UC‑8200 MIL 3 (≥ 3.4.1) DLM_Agent_MIL3_UC-8200 1.1.0‑1
UC‑1200A / 2200A / 3400A / 4400A / 8600A MIL 3 (≥ 3.4.1) DLM_Agent_MIL3_UC-1200A-2200A-3400A-4400A-8600A 1.1.0‑1
UC‑1200A / 2200A / 3400A / 4400A / 8600A MIL 4 DLM_Agent_MIL4_UC-1200A-2200A-3400A-4400A-8600A 2.1.4‑1
✎ NOTE

The same models appear under both MIL 3 and MIL 4 — the MIL version is what decides which to use, so check mx-ver -M if unsure.

The installer stops with a clear message if you pick the wrong package: it checks that the device's MIL major version matches the package (MIL 3 vs MIL 4 — different Debian base, so the wrong one would fail to install / run), that the device meets the minimum MIL patch level (MIL 3 ≥ 3.4.0), and that the package's CPU architecture matches the device (UC‑8200 = armhf/32‑bit; the others = arm64/64‑bit).

2.2 Extract the package — pick the folder for your task

Each Agent package is organised by task, so you use the folder that matches what you want to do:

<agent package>/
├── 1_First_Time_Install/      ← install on a NEW (not yet enrolled) device
│   ├── run                    (guarded install/enroll script)
│   ├── user.yaml              (EDIT: dlmServer.host)
│   ├── credentials.yaml       (EDIT: enrollment account)
│   ├── moxa-dlm-agent_*.deb
│   └── MIL_packages/
├── 2_Update_On_Device/        ← update an ALREADY-enrolled device, locally on the device
│   ├── update_agent.sh        (keeps enrollment & credentials)
│   ├── moxa-dlm-agent_*.deb
│   └── MIL_packages/
├── 3_Update_From_DLM_Server/  ← update from the DLM web console (Run Custom Script)
│   ├── dlm_agent_update.sh
│   └── dlm-agent-update_*.tar (agent + MIL components, ready to upload)
└── Troubleshooting/
    └── collect_dlm_logs.sh
Your task Use this folder
New device, first install 1_First_Time_Install§2.3 onward
Update an enrolled device, on the device 2_Update_On_Device§3.2
Update an enrolled device, from the server 3_Update_From_DLM_Server§3.1
⚠ WARNING

Safety: the 1_First_Time_Install/run script will refuse to run on a device that is already enrolled — interactively it warns and asks to confirm (because continuing re-enrolls the device); run unattended (automation) it stops. To update an enrolled device, use folder 2 or 3, which never touch the existing enrollment or credentials.

2.3 Edit user.yaml

This file is copied to /etc/moxa/moxa-dlm-agent/user.yaml during install; the Agent reads its settings from there.

# Mandatory
dlmServer:
  host: "demo.dlm.moxa"        # DLM Server FQDN — do NOT include the https:// prefix

# Optional
security:
  skipTLSVerify: true          # see table below

dataTransmission:
  trafficUsageDebug:
    enabled: false
    interval: "10m0s"
  cellularPerformanceDebug:
    enabled: true
    interval: "10m0s"

events:
  cpuTemperature:
    threshold: 0
Field Values
dlmServer.host FQDN of the target DLM Server, e.g. demo-xxxx.dlm.dev.moxa.live. No https:// prefix.
security.skipTLSVerify true (default) = skip server‑certificate validation. false = validate the server identity using cert.pem (see §2.5).
dataTransmission.trafficUsageDebug.enabled true = report per‑interface TX/RX at the interval. false (default) = don't report traffic.
dataTransmission.cellularPerformanceDebug.enabled true (default) = report cellular signal/quality (level, RSRP, RSRQ, SINR, ECI). false = don't report.
…interval Minimum 10s. Format 1h0m0s (d/h/m/s).
events.cpuTemperature.threshold 0 (default) = hardware auto‑shutdown temp minus 10 °C. 1–150 = explicit °C. e.g. 90 fires CPU Temperature Too High at 90 °C.

2.4 Edit credentials.yaml

The account used to enroll the device. There is no default enrollment account — you must first create a Provisioner account on the server (§1.5), then put its email/password here. The values below are placeholders, not real defaults.

email: "provisioner@moxa.com"
password: "provisioner@123"
✎ NOTE

The account must exist on the server before enrollment. After the device enrolls, this file is encrypted on the device to protect the password.

2.5 (Optional) Validate the server certificate

For higher security, have the device verify the server's identity:

  1. In user.yaml, set security.skipTLSVerify: false.
  2. Copy the server certificate from the DLM Server to the same folder as run and user.yaml, named cert.pem: /var/lib/dlm/data/certs/root/cert.pem ← on the DLM Server (The installer will refuse to proceed if skipTLSVerify: false but cert.pem is missing.)

2.6 Install on the device

Use the 1_First_Time_Install/ folder. Make sure the device can reach the server (ping YOUR_FQDN).

On the device console, from the 1_First_Time_Install/ folder:

cd 1_First_Time_Install
chmod +x run
sudo ./run
⚠ WARNING

If the device is already enrolled, run will warn and (interactively) ask before re-enrolling, or stop if run unattended. That's expected — use 2_Update_On_Device to update an enrolled device instead. To deliberately re-enroll, run sudo ./run --reinstall.

When finished, verify with mx-dlm-agent status (Part 4).


Part 3: Update the DLM Agent

⚠ WARNING

Always use the dlm_agent_update.sh that ships with each release. An Agent update may also carry MIL component updates, and the script content can differ between releases.

Use this when the device is already connected to the DLM Server.

⚠ WARNING

Update the Agent together with its MIL companions. Each Agent build is released with the specific Moxa Connection Manager (and, on MIL 4, Moxa Edge + moxa-version) versions it depends on. Updating only moxa-dlm-agent*.deb leaves those on old versions and can cause mismatches — so the update must install the agent and its MIL_packages together.

🛡️ The update scripts also refuse to run if the bundle's MIL major or CPU architecture does not match the device (e.g. pushing a MIL 4 bundle to a MIL 3 device) — so a wrong selection in a mixed fleet stops with a clear message instead of breaking the device.

  1. Open the 3_Update_From_DLM_Server/ folder for the device's model/MIL (§2.1). It contains two files — no extra packaging needed:
    • dlm_agent_update.sh
    • dlm-agent-update_*.tar — agent + MIL components, pre-packaged
  2. In the DLM web console, go to All Devices and select the device(s) to update.
  3. Click Run custom script.
  4. In the dialog, upload dlm_agent_update.sh as the Shell Script and the matching dlm-agent-update_*.tar as the additional file, then click Confirm.
Run custom script
Timezone
(GMT +08:00) Asia/Taipei
Date
Jun 30, 2026
Time
21 ▾  :  15 ▾
⚠ Ensure the file is from a trusted source. Verify its digital signature to confirm authenticity and integrity, or use a hash (e.g., SHA256) to confirm integrity before proceeding.
Select a Shell Script
dlm_agent_update.sh
Include additional file used by the script
Select a File (max 1 GB, download larger files in script)
dlm-agent-update_mil4_arm64_2.1.4.tar
DLM web console — Run Custom Script dialog (example: MIL 4, arm64 fleet)
✎ NOTE

After the script completes, the DLM Agent service restarts automatically (~5 s delay so the current session isn't cut off). Re‑check with mx-dlm-agent status after about 30 s.

3.2 On the device (local — keeps enrollment)

If the device is not connected to the server (or you prefer a local update), use the 2_Update_On_Device/ folder. It upgrades the agent + MIL components and keeps the existing enrollment and credentials (it does not re-enroll).

On the device console:

cd 2_Update_On_Device
chmod +x update_agent.sh
sudo ./update_agent.sh
✎ NOTE

Do not use 1_First_Time_Install/run to update an enrolled device — it would re-enroll it. (The script guards against this, but folder 2 is the correct tool for updates.)


Part 4: Verify & Troubleshoot

4.1 Check enrollment status

mx-dlm-agent status
Status What it means What to do
init Agent is initializing and trying to reach the server. Stuck here = it can't reach the server. Check network/Internet; verify dlmServer.host in user.yaml (correct FQDN, no https://).
enroll Enrollment requested; waiting for the server to return the enrollment certificate. Normal transient state — wait.
pending approval Got the certificate and requested registration; waiting for an admin to approve. Approve the device in Device Approval on the web console.
provisioning Admin approved; the server is applying settings. Normal — wait for it to finish.
connecting The device is establishing its connection to the server. Normal transient state.
connected ✅ The device is connected and managed. Done.
disconnected The device lost its connection to the server. Check network and systemctl status moxa-dlm-agent.
error An unidentified error occurred during enrollment/registration. See §4.2.

4.2 When status isn't enough

  1. Check the service health: systemctl status moxa-dlm-agent Common causes: wrong credentials/password, malformed user.yaml, or a configuration error.
  2. If that still doesn't explain it, collect logs for Moxa Support: sudo ./collect_dlm_logs.sh # Produces /tmp/dlm-logs-<host>-<timestamp>.tar.gz — attach it to your support case.

Appendix — quick reference

Item Value
Server package dlm-1.2.0-build.88.tar.gz (verify: sha1sum -c …tar.gz.sha)
Server install dir /usr/local/moxa-dlm-local-apt-repo
Agent config dir /etc/moxa/moxa-dlm-agent/ (user.yaml, cert.pem, private/credentials.enc)
Server certificate /var/lib/dlm/data/certs/root/cert.pem
Default admin password admin@123 (change on first login)
Status command mx-dlm-agent status
Service systemctl status moxa-dlm-agent
Log collector <agent package>/Troubleshooting/collect_dlm_logs.sh
Server‑side updater <agent package>/3_Update_From_DLM_Server/dlm_agent_update.sh (+ dlm-agent-update_*.tar)
Local updater <agent package>/2_Update_On_Device/update_agent.sh
First‑time installer <agent package>/1_First_Time_Install/run